/**
 * 用户数据访问层 - 多租户用户管理的数据库操作接口
 *
 * 开发人员：陈宏伟
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：定义用户管理的数据库查询方法，支持多租户用户数据的查询和管理
 *
 * 技术要点：
 * - Spring Data JPA查询方法定义
 * - 多租户用户数据隔离查询设计
 * - 用户登录验证和重复性检查
 * - 企业内用户列表和邮箱查询
 * - 索引优化和查询性能考虑
 *
 * 开发故事：负责用户Repository的设计和实现，与用户服务层深度配合，提供高效的多租户用户数据访问能力。
 */
package com.pbl.repository;

import com.pbl.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

/**
 * 用户数据访问接口 - 提供多租户用户管理的CRUD操作和查询功能
 */
public interface UserRepository extends JpaRepository<User, Long> {
    /**
     * 根据企业ID和用户名查询用户（用于登录验证）
     * @param enterpriseId 企业ID
     * @param username 用户名
     * @return 用户对象（如果存在）
     */
    Optional<User> findByEnterprise_IdAndUsername(Long enterpriseId, String username);

    /**
     * 检查企业内用户名是否存在
     * @param enterpriseId 企业ID
     * @param username 用户名
     * @return 是否存在
     */
    boolean existsByEnterprise_IdAndUsername(Long enterpriseId, String username);

    /**
     * 根据企业ID和邮箱查询用户
     * @param enterpriseId 企业ID
     * @param email 邮箱
     * @return 用户对象（如果存在）
     */
    Optional<User> findByEnterprise_IdAndEmail(Long enterpriseId, String email);

    /**
     * 查询企业内所有用户列表
     * @param enterpriseId 企业ID
     * @return 用户列表
     */
    List<User> findByEnterprise_Id(Long enterpriseId);
}
